﻿Public Class frmSwiadectwo
    'Uzupelnienie formularza danymi ze zlecenia, kontroli oraz informacjami na temat skladu chemicznego
    'Wszystkie dane można edytować;
    'po kliknięciu przycisku 'Durkuj' dane są zapisyawane do bazy danych, a nastepnie wyświetlane zostaje świadectwo; 
    Private mvarChanged As Boolean
    Private mvarCancel As Boolean = False
    Private mvarDbHolder As clsDataBase
    Private mvarZlecenieId As Integer
    Private mvarSwiadectwo As New clsInhSwiadectwo

    Public Sub New(Swiadectwo As clsInhSwiadectwo)

        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarChanged = False
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)
        mvarSwiadectwo = Swiadectwo
        UzupelnijInformacje()
        mvarChanged = False

    End Sub

    Private Sub PobierzWszystkieGatunkiMaterialu()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsGatunek.PobierzWszystkieGatunki(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbGatunek.Items.Add(New clsGatunek(CInt(lvarRow("id")), CStr(IIf(IsDBNull(lvarRow("nazwa_ang")), "", lvarRow("nazwa_ang"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), "", lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("nazwa_niem")), "", lvarRow("nazwa_niem"))), CStr(IIf(IsDBNull(lvarRow("norma_wykonania")), "", lvarRow("norma_wykonania"))), CStr(IIf(IsDBNull(lvarRow("stop_id")), -1, lvarRow("stop_id")))))
                cmbGatunek.AutoCompleteCustomSource.Add(CStr(lvarRow("nazwa_ang")))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkiePakowania()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPakowanie.PobierzWszystkieOpcje(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbPakowanie.Items.Add(New clsPakowanie(CStr(lvarRow("id")), CType(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa")), String), CType(IIf(IsDBNull(lvarRow("cena")), 0, lvarRow("cena")), Double), CType(IIf(IsDBNull(lvarRow("waga")), 0, lvarRow("waga")), Double)))
                cmbPakowanie.AutoCompleteCustomSource.Add(CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieWytopy(ByVal Id As Integer)

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsInhMaterial.PobierzWszystkieWytopyGatunku(mvarDbHolder, Id)

        cmbWytop.Items.Clear()
        cmbWytop.ResetText()
        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbWytop.Items.Add(New clsMaterial(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("gatunek_id")), -1, lvarRow("gatunek_id"))), CStr(IIf(IsDBNull(lvarRow("dostawca_id")), "", lvarRow("dostawca_id"))), CDate(IIf(IsDBNull(lvarRow("data_utworzenia")), "", lvarRow("data_utworzenia"))), CStr(IIf(IsDBNull(lvarRow("wymiar")), -1, lvarRow("wymiar"))), CStr(IIf(IsDBNull(lvarRow("wytop")), "", lvarRow("wytop"))), CStr(IIf(IsDBNull(lvarRow("wytrzymalosc")), -1, lvarRow("wytrzymalosc"))), CStr(IIf(IsDBNull(lvarRow("wydluzenie")), -1, lvarRow("wydluzenie"))), CStr(IIf(IsDBNull(lvarRow("ilosc")), -1, lvarRow("ilosc"))), CStr(IIf(IsDBNull(lvarRow("cena")), -1, lvarRow("cena"))), CStr(IIf(IsDBNull(lvarRow("waluta_id")), "", lvarRow("waluta_id")))))
                cmbWytop.AutoCompleteCustomSource.Add(CStr(IIf(IsDBNull(lvarRow("wytop")), "", lvarRow("wytop"))))
            Next
        End If

    End Sub


    Private Sub UzupelnijInformacje()

        PobierzWszystkieGatunkiMaterialu()
        PobierzWszystkiePakowania()

        lblNumerZlecenia.Text = mvarSwiadectwo.NumerZlecenia
        lblKlient.Text = mvarSwiadectwo.Klient.NazwaSkrocona
        txtNumerZamowieniaKlienta.Text = mvarSwiadectwo.NrZamowieniaKlienta
        txtNumerFaktury.Text = mvarSwiadectwo.NumerFaktury
        dtpDataWydruku.Value = mvarSwiadectwo.DataWydruku
        dtpDataZamowienia.Value = mvarSwiadectwo.DataZamowienia

        For lvarI As Integer = 0 To cmbGatunek.Items.Count - 1
            If CType(cmbGatunek.Items(lvarI), clsGatunek).Id = mvarSwiadectwo.GatunekId Then
                cmbGatunek.SelectedIndex = lvarI
                txtNormaWykonania.Text = CType(cmbGatunek.Items(lvarI), clsGatunek).NormaWykonania
            End If
        Next

        For lvarI As Integer = 0 To cmbPakowanie.Items.Count - 1
            If CInt(CType(cmbPakowanie.Items(lvarI), clsPakowanie).Id) = mvarSwiadectwo.PakowanieId Then
                cmbPakowanie.SelectedIndex = lvarI
            End If
        Next

        txtWymiar.Text = mvarSwiadectwo.Wymiar
        txtTolDolna.Text = mvarSwiadectwo.TolDolna
        txtTolGorna.Text = mvarSwiadectwo.TolGorna
        txtWaga.Text = mvarSwiadectwo.Waga
        txtIloscSztuk.Text = CStr(mvarSwiadectwo.IloscSztuk)

        PobierzWszystkieWytopy(mvarSwiadectwo.GatunekId)
        For lvarI As Integer = 0 To cmbWytop.Items.Count - 1
            If CType(cmbWytop.Items(lvarI), clsMaterial).Wytop = mvarSwiadectwo.Wytop Then
                cmbWytop.SelectedIndex = lvarI
            End If
        Next
        'UzupelnijSkladChemiczny(CType(cmbWytop.SelectedItem, clsMaterial).Id)

        txtNumerFaktury.Text = mvarSwiadectwo.NumerFaktury

        Dim lvarJ = 0
        For Each lvarWlasciwosci As clsInhWlasciwosciMechaniczne In mvarSwiadectwo.WlasciwosciMechaniczne
            lvarJ += 1
            dgvWlasciwosci.Rows.Add(lvarJ, lvarWlasciwosci.DrutId, Replace(lvarWlasciwosci.Sila, ".", ","), Replace(lvarWlasciwosci.Wytrzymalosc, ".", ","), Replace(lvarWlasciwosci.Procent, ".", ","))
            dgvWlasciwosci.Rows(lvarJ - 1).Tag = lvarWlasciwosci
        Next

    End Sub

    Private Sub UzupelnijSkladChemiczny(MaterialId As Integer)

        Dim lvarJ = 0
        Dim lvarMaterial As clsInhMaterial
        Dim lvarSwiadectwoSkladChemiczny As clsInhSwiadectwoSkladChemiczny
        Dim lvarWyzn As Boolean


        lvarMaterial = New clsInhMaterial(MaterialId, mvarDbHolder)

        If dgvSkladChemiczny.Rows.Count > 0 Then
            dgvSkladChemiczny.Rows.Clear()
        End If

        'sprawdzenie czy wytopy się zgadzaja
        If lvarMaterial.Wytop = mvarSwiadectwo.Wytop Then
            ' uzupelnienie dgvSkladChemiczny wartosciami z swiadectwa, ktore bylo juz utworzone
            For Each lvarSklad As clsInhSwiadectwoSkladChemiczny In mvarSwiadectwo.SkladChemiczny
                lvarJ += 1
                dgvSkladChemiczny.Rows.Add(lvarJ, lvarSklad.Pierwiastek.Nazwa, Replace(lvarSklad.Wartosc, ".", ","))
                dgvSkladChemiczny.Rows(lvarJ - 1).Tag = lvarSklad
            Next
        End If

        ' sparwdzenie czynie trzeba dodac jakis pierwiastkow, ktore byly pozniej dodane do materialu
        '       lvarMaterial = New clsInhMaterial(MaterialId, mvarDbHolder)
        For Each lvarSklad As clsInhSkladChemiczny In lvarMaterial.SkladChemiczny
            For Each lvarRow As DataGridViewRow In dgvSkladChemiczny.Rows
                If lvarSklad.Sklad.PierwiastekId = CType(lvarRow.Tag, clsInhSwiadectwoSkladChemiczny).PierwiastekId Then
                    lvarWyzn = True
                    Exit For
                Else
                    lvarWyzn = False
                End If
            Next
            If Not lvarWyzn Then
                lvarSwiadectwoSkladChemiczny = New clsInhSwiadectwoSkladChemiczny
                With lvarSwiadectwoSkladChemiczny
                    .SwiadectwoId = mvarSwiadectwo.Id
                    .Pierwiastek.Nazwa = lvarSklad.Sklad.Pierwiastek.Nazwa
                    .PierwiastekId = lvarSklad.Sklad.PierwiastekId
                    .Wartosc = lvarSklad.Wartosc
                End With

                lvarJ += 1
                dgvSkladChemiczny.Rows.Add(lvarJ, CType(lvarSklad.Sklad, clsInhSklad).Pierwiastek.Nazwa, Replace(lvarSklad.Wartosc, ".", ","))
                dgvSkladChemiczny.Rows(lvarJ - 1).Tag = lvarSwiadectwoSkladChemiczny
            End If

        Next


    End Sub

    Private Sub Zapisz()

        With mvarSwiadectwo
            .NrZamowieniaKlienta = txtNumerZamowieniaKlienta.Text
            .DataZamowienia = dtpDataZamowienia.Value
            .NumerFaktury = txtNumerFaktury.Text
            .GatunekId = CType(cmbGatunek.SelectedItem, clsGatunek).Id
            .PakowanieId = CInt(CType(cmbPakowanie.SelectedItem, clsPakowanie).Id)
            .Wymiar = Replace(txtWymiar.Text, ",", ".")
            .TolDolna = Replace(txtTolDolna.Text, ",", ".")
            .TolGorna = Replace(txtTolGorna.Text, ",", ".")
            .DataWydruku = dtpDataWydruku.Value
            If cmbWytop.SelectedIndex <> -1 Then
                .Wytop = cmbWytop.SelectedItem.ToString
            End If

            .IloscSztuk = CInt(txtIloscSztuk.Text)
            .Waga = Replace(txtWaga.Text, ",", ".")
            .NormaWykonania = txtNormaWykonania.Text

            For Each skladChemiczny As clsInhSwiadectwoSkladChemiczny In mvarSwiadectwo.SkladChemiczny
                mvarSwiadectwo.SkladChemicznyDel.Add(skladChemiczny)
            Next
            .SkladChemiczny.Clear()
            For Each lvarRow As DataGridViewRow In dgvSkladChemiczny.Rows
                Dim lvarSklad As New clsInhSwiadectwoSkladChemiczny
                With lvarSklad
                    .SwiadectwoId = mvarSwiadectwo.Id
                    .PierwiastekId = CType(lvarRow.Tag, clsInhSwiadectwoSkladChemiczny).PierwiastekId
                    .Wartosc = Replace(CStr(lvarRow.Cells("colWartosc").Value), ",", ".")
                End With
                .SkladChemiczny.Add(lvarSklad)
            Next

            For Each wlasciwoscMechaniczna As clsInhWlasciwosciMechaniczne In mvarSwiadectwo.WlasciwosciMechaniczne
                mvarSwiadectwo.WlasciwosciMechaniczneDel.Add(wlasciwoscMechaniczna)
            Next
            .WlasciwosciMechaniczne.Clear()
            For Each lvarRow As DataGridViewRow In dgvWlasciwosci.Rows

                Dim lvarWlasciwosci As New clsInhWlasciwosciMechaniczne
                With lvarWlasciwosci
                    .SwiadectwoId = CStr(mvarSwiadectwo.Id)
                    .DrutId = CType(lvarRow.Tag, clsInhWlasciwosciMechaniczne).DrutId
                    .Sila = Replace(CStr(lvarRow.Cells("colSila").Value), ",", ".")
                    .Wytrzymalosc = Replace(CStr(lvarRow.Cells("colWytrzymalosc").Value), ",", ".")
                    .Procent = Replace(CStr(lvarRow.Cells("colProcent").Value), ",", ".")
                End With
                .WlasciwosciMechaniczne.Add(lvarWlasciwosci)
            Next
            .Save(mvarDbHolder)
        End With

    End Sub


    Private Sub cmdDrukuj_Click(sender As Object, e As EventArgs) Handles cmdDrukuj.Click

        If mvarChanged Or mvarSwiadectwo.Id = -1 Then
            Zapisz()
        End If

        Try
            Dim swiadectwoReport As New Swiadectwo_1Report()
            swiadectwoReport.SetParameterValue("p_id", mvarSwiadectwo.Id)
            Dim reportPreview As New frmPrintViewer(swiadectwoReport, False)
            reportPreview.ShowDialog()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub frmSwiadectwo_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        mvarDbHolder.Close()
    End Sub

#Region "Changed"

    Private Sub txtNumerZamowieniaKlienta_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNumerZamowieniaKlienta.TextChanged
        mvarChanged = True
    End Sub

    Private Sub dtpDataZamowienia_ValueChanged(sender As Object, e As EventArgs) Handles dtpDataZamowienia.ValueChanged
        mvarChanged = True
    End Sub

    Private Sub dtpDataWydruku_ValueChanged(sender As Object, e As EventArgs) Handles dtpDataWydruku.ValueChanged
        mvarChanged = True
    End Sub

    Private Sub cmbGatunek_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbGatunek.SelectedIndexChanged

        Dim gatunek As clsGatunek = CType(cmbGatunek.SelectedItem, clsGatunek)


        mvarSwiadectwo.GatunekId = gatunek.Id
        PobierzWszystkieWytopy(mvarSwiadectwo.GatunekId)
        For lvarI As Integer = 0 To cmbWytop.Items.Count - 1
            If CType(cmbWytop.Items(lvarI), clsMaterial).Wytop = mvarSwiadectwo.Wytop Then
                cmbWytop.SelectedIndex = lvarI
            End If
        Next
        txtNormaWykonania.Text = gatunek.NormaWykonania
        mvarSwiadectwo.NormaWykonania = gatunek.NormaWykonania
        mvarChanged = True
    End Sub

    Private Sub txtNormaWykonania_TextChanged(sender As Object, e As System.EventArgs) Handles txtNormaWykonania.TextChanged
        mvarChanged = True
    End Sub

    Private Sub cmbPakowanie_SelectedValueChanged(sender As Object, e As EventArgs) Handles cmbPakowanie.SelectedValueChanged
        mvarChanged = True
    End Sub

    Private Sub txtWymiar_TextChanged(sender As Object, e As System.EventArgs) Handles txtWymiar.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtTolDolna_TextChanged(sender As Object, e As System.EventArgs) Handles txtTolDolna.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtTolGorna_TextChanged(sender As Object, e As EventArgs) Handles txtTolGorna.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtWaga_TextChanged(sender As Object, e As EventArgs) Handles txtWaga.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtIloscSztuk_TextChanged(sender As Object, e As EventArgs) Handles txtIloscSztuk.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtNumerFaktury_TextChanged(sender As Object, e As EventArgs) Handles txtNumerFaktury.TextChanged
        mvarChanged = True
    End Sub

    Private Sub cmbWytop_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbWytop.SelectedIndexChanged
        mvarChanged = True

        For Each skladChemiczny As clsInhSwiadectwoSkladChemiczny In mvarSwiadectwo.SkladChemiczny
            mvarSwiadectwo.SkladChemicznyDel.Add(skladChemiczny)
        Next
        mvarSwiadectwo.SkladChemiczny.Clear()

        UzupelnijSkladChemiczny(CType(cmbWytop.SelectedItem, clsMaterial).Id)
    End Sub

#End Region


End Class